#include "dbBase.h"
#include <QDebug>
#include <QtWidgets>

SqlLite::SqlLite()
{
    //初始化数据库
    db = QSqlDatabase::addDatabase("QSQLITE");
    // 设置数据库名称（文件名），如果文件不存在，将会自动创建
    db.setDatabaseName("node.db");

    // 打开数据库
    if (!db.open()) {
        QMessageBox::critical(nullptr, "无法打开数据库", "无法打开数据库：" + db.lastError().text());
    }

    qDebug() << "数据库已成功打开";

    // 可以在这里执行SQL语句，比如创建表
    QSqlQuery query;
    if (!query.exec("CREATE TABLE IF NOT EXISTS node (id INTEGER PRIMARY KEY AUTOINCREMENT, Tile TEXT, Context TEXT)")) {
        qDebug() << "无法创建表:" << query.lastError().text();
    }
    else {
        qDebug() << "表已成功创建";
    }

}

SqlLite::~SqlLite()
{
    // 关闭数据库
    db.close();
}

void SqlLite::Write(const QString Tile, const QString Context, const int id)
{
    // 写数据
    QSqlQuery query;
    // 使用 INSERT ... ON CONFLICT 语句
    query.prepare("INSERT INTO node (id, Tile, Context) VALUES (:id, :Tile, :Context) "
        "ON CONFLICT(id) DO UPDATE SET Tile = excluded.Tile, Context = excluded.Context");
    query.bindValue(":id", id);
    query.bindValue(":Tile", Tile);
    query.bindValue(":Context", Context);
    // 执行查询
    bool success = query.exec();

    if (!success) {
        qDebug() << "写入数据失败:" << query.lastError().text();
    }
    else {
        qDebug() << "数据已成功写入或更新";
    }
}




bool  SqlLite::read(const int id)
{
    // 读数据
    QSqlQuery query;
    // 准备从 node 表中选择指定 id 的 Context 和 Tile 数据
    query.prepare("SELECT Tile,Context  FROM node WHERE id = :id");
    query.bindValue(":id", id);

    if (!query.exec()) {
        qDebug() << "读取数据失败:" << query.lastError().text();
        return false;
    }
    else if (query.next()) {
        //是否有数据
        m_context = query.value(0).toString();
        m_tile = query.value(1).toString();
        qDebug() << "Context:" << m_context;
        qDebug() << "Tile:" << m_tile;
        return true;
    }
    else {
        qDebug() << "未找到指定 id 的数据";
        return false;
    }

    return false;
}

QString SqlLite::getTile()
{
    return m_context;
}

QString SqlLite::getContext()
{
    return m_tile;
}

